﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using MEsE.NET.Serveripää;
using MEsE.NET.ExtMethods;
using MEsE.NET.Dialogit;
using System.Windows.Threading;

namespace MEsE.NET
{
    /// <summary>
    /// Interaction logic for Keskusteluikkuna.xaml
    /// </summary>
    public partial class Keskusteluikkuna : Window
    {
        public user käyttäjä 
        {get;set;}

        public user Kaveri
        { get; set; }

        
        App controller = null;

        public Keskusteluikkuna(String kaverinnimi, user Käyttäjä, App controller)
        {
            try
            {
                MEsE_WSClient login = new MEsE_WSClient();
                this.controller = controller;

                käyttäjä = Käyttäjä;

                login.getKäyttäjät(Käyttäjä).
                    Where(user => 
                        user.nayttönimi == kaverinnimi).
                        ForEach(User => 
                            Kaveri = User);

                InitializeComponent();

                kaverinData.ItemsSource = new user[] { Kaveri };

                kaverinKuva.ItemsSource = new user[] { Kaveri };
                omaKuva.ItemsSource = new user[] { käyttäjä };

                controller.ReceivedMessages += Receive;

                Closing += (s, e) =>
                    {
                        controller.ReceivedMessages -= Receive;
                    };
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void vastausKenttä_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Return)
            {
                send(vastausKenttä.Text);
                _keskustelu +=
                    DateTime.Now.ToShortTimeString() + ":\n" +
                    //Tyylit pitänee siirtää tyylisivulle Keskustelu-getteriin
                    käyttäjä.nayttönimi + " sanoo:\n<span class=\"koko\" style=\"font-family:" + controller.Fontti.fontname + "; color: #" + controller.Fontti.color + "; ";

                if (controller.Fontti.bold) _keskustelu += " font-weight: bold; ";
                if (controller.Fontti.italic) _keskustelu += " font-style: italic; ";
                if (controller.Fontti.underlined) _keskustelu += " text-decoration: underline; ";

                _keskustelu += "\">" +
                           vastausKenttä.Text+ "</span>\n";

                keskustelu.NavigateToString(Keskustelu);
                

                vastausKenttä.Text = string.Empty;
            }
        }

        private void send(string line)
        {
            MEsE_WSClient client = new MEsE_WSClient();
            client.SendMessage(Kaveri.nayttönimi, käyttäjä, line, controller.Fontti);
        }

        public void Receive(object Controller, ReceivedMessagesEventArgs Eventargs)
        {
            if (Eventargs.Viesti.from.equals(Kaveri))
            {
                sanoma Sanoma = Eventargs.Viesti;
                _keskustelu +=
                    Sanoma.date.ToShortTimeString() + ":\n" +
                    //Tyylit pitänee siirtää tyylisivulle Keskustelu-getteriin
                    Sanoma.from.nayttönimi + " sanoo:\n <span class=\"koko\" style=\"font-family:" + Eventargs.Viesti.font.fontname + "; color: #" + Eventargs.Viesti.font.color+";";

                if (Sanoma.font.bold) _keskustelu += " font-weight: bold; ";
                if (Sanoma.font.italic) _keskustelu += " font-style: italic; ";
                if (Sanoma.font.underlined) _keskustelu += " text-decoration: underline; ";

                _keskustelu += "\">" +
                           Sanoma.line + "</span>\n";
                
                Eventargs.viestiHyväksytty = true;
                keskustelu.NavigateToString(Keskustelu);
            }
        }



        private string _keskustelu = string.Empty;

        protected string Keskustelu
        {
            get
            {
                string html = @"<html>
                    <head>
                        <meta charset=""utf-8""/>
                        <style>
                            .koko{font-size:"+controller.Fonttikoko+@" px};
                        </style>";

                if(lukitseNäkymä.IsChecked == false)
                    html += @"
                        <script>
window.onload = function()
{
window.scrollTo(0, document.body.scrollHeight);
}
                        </script>";

                html += @"
                    </head>
                    <body scroll=auto>" + _keskustelu.Replace("\n", "<br />") + "</body></html>";

                return html;
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            new FontDialog(controller).ShowDialog();
        }
    }
}
